#ifndef __Windows_Manager_H__
#define __Windows_Manager_H__

#include <string>
#include <vector>
#include "I_Windows_Manager.h"

class Windows_Information_Collection;
class Windows_Searcher;
class Windows_Information;

class Windows_Manager : public I_Windows_Manager
{
public:
	//typedef std::vector<Windows_Information *> Windows_Info_Collection;
	static const int MAX_WINDOWS_NUMBER = 16;
	Windows_Manager();
	virtual ~Windows_Manager();
	
	virtual int get_windows_total();
	virtual const char * get_directory(int wid, Path_Token token);
	virtual Windows_Edition get_windows_version(int wid);
	virtual int get_windows_users_total(int wid);
	virtual const char * get_partition_in_string(int wid);
	virtual int	get_windows_version_and_build_number(int wid, 
	int & major_ver, int & minor_ver, int & build_num);
	virtual void * local_dynamic_cast(const char * type);
	virtual void	delete_self();
	virtual const Windows_Information * get_windows_information(int wid) const;
	virtual const Windows_Information * get_windows_information(const char * win_root) const;

private:
	Windows_Manager(const Windows_Manager &);
	Windows_Information * windows_info_array_[MAX_WINDOWS_NUMBER];
	int	windows_total_;
	int	current_system_id_;
	Windows_Information_Collection * windows_info_collection_;
	Windows_Searcher	* windows_searcher_;
	static Windows_Manager * s_instance;	
};

#endif
